Linus批评英特尔的LAM代码,拒绝将其合并到内核
英特尔线性地址掩码 (LAM) 允许软件将 64 位线性地址的未转换地址位用于元数据,线性地址使用 48 位(4 级分页)或 57 位(5 级分页),而 LAM 允许将 64 位线性地址的剩余空间用于元数据。
简而言之,英特尔 LAM 在使用用户空间地址的未翻译地址位,因此它可用于用户空间内存清理和标记等元数据的多种用途,它的本质上类似于 AMD 的高位地址忽略 “UAI”(Upper Address Ignore )以及 Arm 的顶部字节忽略 “TBI”(Top-Bits-Ignore)功能。
现在要求英特尔将这个 LAM 功能称为 “Top-Bits-Ignore” (TBI) ,会不会有些太晚了?
...
整个 LAM 功能不是特定于 mm ,它可以轻松影响每个线程。
想象一下,有一个设置,其中一些线程使用标记指针,而一些线程不使用。例如,地址的高位可能包含一个仅在虚拟机中使用的标签,甚至可以让 “本机” 模式使用完整的地址空间,并将其自身及私有数据虚拟地放在高位。
再想象一下,使用虚拟地址掩码不仅能实现内存清理器,还能实现一种真实的分离功能(例如,JITed 代码可能基本上只能访问较低的位,而 JITter 本身可以看到整个地址空间)。
也许这不是 LAM 在 x86 上的工作方式,但它对 untagged_addr () 的更改并不是 x86 特定的。所以我真的认为这是完全错误的,除了命名之外, 它全都是一些无效的假设。事实上,这个特定于 mm 的 LAM 功能,最后只会成为代码中一个活跃的 Bug ,即使在 x86-64 上也是如此。
所以我真的认为 LAM 是一个根本性的设计错误,虽然我把它拉出来并解决了琐碎的冲突,但我又把它拉了下来,因为它的设计是错误的。
相关链接:
https://lore.kernel.org/lkml/CAHk-=wi=TY3Kte5Z1_nvfcsEh+rcz86pYnzeASw=pbG9QtpJEQ@mail.gmail.com/
https://lore.kernel.org/lkml/CAHk-=whKuB=mno0a5i9g7hPGdKhz3d5DErTZZGs3FjMW4ap4GA@mail.gmail.com/
往期推荐
Google公布2022年度最热门Chrome扩展
Shopify拥抱Rust
OCaml 5.0.0 正式发布
点这里 ↓↓↓ 记得 关注✔ 标星⭐ 哦~